home *** CD-ROM | disk | FTP | other *** search
/ Freelog 100 / FreelogNo100-NovembreDecembre2010.iso / Musique / solfege / solfege-win32-3.17.0.exe / {app} / bin / Lib / site-packages / gtk-2.0 / dsextras.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2010-05-04  |  16KB  |  436 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. from distutils.command.build_ext import build_ext
  5. from distutils.command.install_lib import install_lib
  6. from distutils.command.install_data import install_data
  7. from distutils.extension import Extension
  8. import distutils.dep_util as distutils
  9. import fnmatch
  10. import os
  11. import re
  12. import string
  13. import sys
  14. GLOBAL_INC = []
  15. GLOBAL_MACROS = []
  16.  
  17. def get_m4_define(varname):
  18.     '''Return the value of a m4_define variable as set in configure.in.'''
  19.     pattern = re.compile('m4_define\\(' + varname + '\\,\\s*(.+)\\)')
  20.     if os.path.exists('configure.ac'):
  21.         fname = 'configure.ac'
  22.     elif os.path.exists('configure.in'):
  23.         fname = 'configure.in'
  24.     else:
  25.         raise SystemExit('could not find configure file')
  26.     for line in open(fname).readlines():
  27.         match_obj = pattern.match(line)
  28.         if match_obj:
  29.             return match_obj.group(1)
  30.             continue
  31.     
  32.  
  33.  
  34. def getoutput(cmd):
  35.     '''Return output (stdout or stderr) of executing cmd in a shell.'''
  36.     return getstatusoutput(cmd)[1]
  37.  
  38.  
  39. def getstatusoutput(cmd):
  40.     '''Return (status, output) of executing cmd in a shell.'''
  41.     if sys.platform == 'win32':
  42.         pipe = os.popen(cmd, 'r')
  43.         text = pipe.read()
  44.         if not pipe.close():
  45.             pass
  46.         sts = 0
  47.         if text[-1:] == '\n':
  48.             text = text[:-1]
  49.         
  50.         return (sts, text)
  51.     else:
  52.         getstatusoutput = getstatusoutput
  53.         import commands
  54.         return getstatusoutput(cmd)
  55.  
  56.  
  57. def have_pkgconfig():
  58.     '''Checks for the existence of pkg-config'''
  59.     if sys.platform == 'win32' and os.system('pkg-config --version > NUL') == 0:
  60.         return 1
  61.     elif getstatusoutput('pkg-config')[0] == 256:
  62.         return 1
  63.     
  64.  
  65.  
  66. def list_files(dir):
  67.     '''List all files in a dir, with filename match support:
  68.     for example: glade/*.glade will return all files in the glade directory
  69.     that matches *.glade. It also looks up the full path'''
  70.     if dir.find(os.sep) != -1:
  71.         parts = dir.split(os.sep)
  72.         dir = string.join(parts[:-1], os.sep)
  73.         pattern = parts[-1]
  74.     else:
  75.         pattern = dir
  76.         dir = '.'
  77.     dir = os.path.abspath(dir)
  78.     retval = []
  79.     for file in os.listdir(dir):
  80.         if fnmatch.fnmatch(file, pattern):
  81.             retval.append(os.path.join(dir, file))
  82.             continue
  83.     
  84.     return retval
  85.  
  86.  
  87. def pkgc_version_check(name, req_version):
  88.     '''Check the existence and version number of a package:
  89.     returns 0 if not installed or too old, 1 otherwise.'''
  90.     is_installed = not os.system('pkg-config --exists %s' % name)
  91.     if not is_installed:
  92.         return 0
  93.     
  94.     orig_version = getoutput('pkg-config --modversion %s' % name)
  95.     version = map(int, orig_version.split('.'))
  96.     pkc_version = map(int, req_version.split('.'))
  97.     if version >= pkc_version:
  98.         return 1
  99.     
  100.     return 0
  101.  
  102.  
  103. class BuildExt(build_ext):
  104.     
  105.     def init_extra_compile_args(self):
  106.         self.extra_compile_args = []
  107.         if sys.platform == 'win32' and self.compiler.compiler_type == 'mingw32':
  108.             msnative_struct = {
  109.                 '2': '-fnative-struct',
  110.                 '3': '-mms-bitfields' }
  111.             gcc_version = getoutput('gcc -dumpversion')
  112.             print 'using MinGW GCC version %s with %s option' % (gcc_version, msnative_struct[gcc_version[0]])
  113.             self.extra_compile_args.append(msnative_struct[gcc_version[0]])
  114.         
  115.  
  116.     
  117.     def modify_compiler(self):
  118.         if sys.platform == 'win32' and self.compiler.compiler_type == 'mingw32':
  119.             if self.compiler.linker_so.count('-static'):
  120.                 self.compiler.linker_so.remove('-static')
  121.             
  122.         
  123.  
  124.     
  125.     def build_extensions(self):
  126.         self.init_extra_compile_args()
  127.         self.modify_compiler()
  128.         build_ext.build_extensions(self)
  129.  
  130.     
  131.     def build_extension(self, ext):
  132.         ext.extra_compile_args += self.extra_compile_args
  133.         if hasattr(ext, 'generate'):
  134.             ext.generate()
  135.         
  136.         build_ext.build_extension(self, ext)
  137.         if save_libs != None and save_libs != ext.libraries:
  138.             ext.libraries = save_libs
  139.         
  140.  
  141.  
  142.  
  143. class InstallLib(install_lib):
  144.     local_outputs = []
  145.     local_inputs = []
  146.     
  147.     def set_install_dir(self, install_dir):
  148.         self.install_dir = install_dir
  149.  
  150.     
  151.     def get_outputs(self):
  152.         return install_lib.get_outputs(self) + self.local_outputs
  153.  
  154.     
  155.     def get_inputs(self):
  156.         return install_lib.get_inputs(self) + self.local_inputs
  157.  
  158.  
  159.  
  160. class InstallData(install_data):
  161.     local_outputs = []
  162.     local_inputs = []
  163.     template_options = { }
  164.     
  165.     def prepare(self):
  166.         if os.name == 'nt':
  167.             self.prefix = os.sep.join(self.install_dir.split(os.sep)[:-3])
  168.         else:
  169.             self.prefix = os.sep.join(self.install_dir.split(os.sep)[:-4])
  170.         self.exec_prefix = '${prefix}/bin'
  171.         self.includedir = '${prefix}/include'
  172.         self.libdir = '${prefix}/lib'
  173.         self.datarootdir = '${prefix}/share'
  174.         self.datadir = '${prefix}/share'
  175.         self.add_template_option('prefix', self.prefix)
  176.         self.add_template_option('exec_prefix', self.exec_prefix)
  177.         self.add_template_option('includedir', self.includedir)
  178.         self.add_template_option('libdir', self.libdir)
  179.         self.add_template_option('datarootdir', self.datarootdir)
  180.         self.add_template_option('datadir', self.datadir)
  181.         self.add_template_option('PYTHON', sys.executable)
  182.         self.add_template_option('THREADING_CFLAGS', '')
  183.  
  184.     
  185.     def set_install_dir(self, install_dir):
  186.         self.install_dir = install_dir
  187.  
  188.     
  189.     def add_template_option(self, name, value):
  190.         self.template_options['@%s@' % name] = value
  191.  
  192.     
  193.     def install_template(self, filename, install_dir):
  194.         '''Install template filename into target directory install_dir.'''
  195.         output_file = os.path.split(filename)[-1][:-3]
  196.         template = open(filename).read()
  197.         for key, value in self.template_options.items():
  198.             template = template.replace(key, value)
  199.         
  200.         output = os.path.join(install_dir, output_file)
  201.         self.mkpath(install_dir)
  202.         open(output, 'w').write(template)
  203.         self.local_inputs.append(filename)
  204.         self.local_outputs.append(output)
  205.         return output
  206.  
  207.     
  208.     def get_outputs(self):
  209.         return install_data.get_outputs(self) + self.local_outputs
  210.  
  211.     
  212.     def get_inputs(self):
  213.         return install_data.get_inputs(self) + self.local_inputs
  214.  
  215.  
  216.  
  217. class PkgConfigExtension(Extension):
  218.     pygobject_pkc = 'pygobject-2.0'
  219.     can_build_ok = None
  220.     
  221.     def __init__(self, **kwargs):
  222.         name = kwargs['pkc_name']
  223.         kwargs['include_dirs'] = self.get_include_dirs(name) + GLOBAL_INC
  224.         kwargs['define_macros'] = GLOBAL_MACROS
  225.         kwargs['libraries'] = self.get_libraries(name)
  226.         kwargs['library_dirs'] = self.get_library_dirs(name)
  227.         if 'pygobject_pkc' in kwargs:
  228.             self.pygobject_pkc = kwargs.pop('pygobject_pkc')
  229.         
  230.         if self.pygobject_pkc:
  231.             kwargs['include_dirs'] += self.get_include_dirs(self.pygobject_pkc)
  232.             kwargs['libraries'] += self.get_libraries(self.pygobject_pkc)
  233.             kwargs['library_dirs'] += self.get_library_dirs(self.pygobject_pkc)
  234.         
  235.         self.name = kwargs['name']
  236.         self.pkc_name = kwargs['pkc_name']
  237.         self.pkc_version = kwargs['pkc_version']
  238.         del kwargs['pkc_name']
  239.         del kwargs['pkc_version']
  240.         Extension.__init__(self, **kwargs)
  241.  
  242.     
  243.     def get_include_dirs(self, names):
  244.         if type(names) != tuple:
  245.             names = (names,)
  246.         
  247.         retval = []
  248.         for name in names:
  249.             output = getoutput('pkg-config --cflags-only-I %s' % name)
  250.             retval.extend(output.replace('-I', '').split())
  251.         
  252.         return retval
  253.  
  254.     
  255.     def get_libraries(self, names):
  256.         if type(names) != tuple:
  257.             names = (names,)
  258.         
  259.         retval = []
  260.         for name in names:
  261.             output = getoutput('pkg-config --libs-only-l %s' % name)
  262.             retval.extend(output.replace('-l', '').split())
  263.         
  264.         return retval
  265.  
  266.     
  267.     def get_library_dirs(self, names):
  268.         if type(names) != tuple:
  269.             names = (names,)
  270.         
  271.         retval = []
  272.         for name in names:
  273.             output = getoutput('pkg-config --libs-only-L %s' % name)
  274.             retval.extend(output.replace('-L', '').split())
  275.         
  276.         return retval
  277.  
  278.     
  279.     def can_build(self):
  280.         '''If the pkg-config version found is good enough'''
  281.         if self.can_build_ok != None:
  282.             return self.can_build_ok
  283.         
  284.         if type(self.pkc_name) != tuple:
  285.             reqs = [
  286.                 (self.pkc_name, self.pkc_version)]
  287.         else:
  288.             reqs = zip(self.pkc_name, self.pkc_version)
  289.         for package, version in reqs:
  290.             retval = os.system('pkg-config --exists %s' % package)
  291.             if retval:
  292.                 print '* %s.pc could not be found, bindings for %s will not be built.' % (package, self.name)
  293.                 self.can_build_ok = 0
  294.                 return 0
  295.             
  296.             orig_version = getoutput('pkg-config --modversion %s' % package)
  297.             if map(int, orig_version.split('.')) >= map(int, version.split('.')):
  298.                 self.can_build_ok = 1
  299.                 return 1
  300.                 continue
  301.             print 'Warning: Too old version of %s' % self.pkc_name
  302.             print '         Need %s, but %s is installed' % (package, orig_version)
  303.             self.can_build_ok = 0
  304.             return 0
  305.         
  306.  
  307.     
  308.     def generate(self):
  309.         pass
  310.  
  311.  
  312. template_classes_enabled = True
  313. codegen_error_message = '\n***************************************************************************\nCodegen could not be found on your system and is required by the\ndsextras.Template and dsextras.TemplateExtension classes. codegen is part\nof PyGTK. To use either Template or TemplateExtension, you should also\ninstall PyGTK.\n***************************************************************************\n'
  314.  
  315. try:
  316.     from codegen.override import Overrides
  317.     from codegen.defsparser import DefsParser
  318.     from codegen.codegen import register_types, SourceWriter, FileOutput
  319.     import codegen.createdefs as codegen
  320. except ImportError:
  321.     e = None
  322.     template_classes_enabled = False
  323.  
  324.  
  325. class Template(object):
  326.     
  327.     def __new__(cls, *args, **kwds):
  328.         if not template_classes_enabled:
  329.             raise NameError("'%s' is not defined\n" % cls.__name__ + codegen_error_message)
  330.         
  331.         return object.__new__(cls, *args, **kwds)
  332.  
  333.     
  334.     def __init__(self, override, output, defs, prefix, register = [], load_types = None, py_ssize_t_clean = False):
  335.         self.override = override
  336.         self.output = output
  337.         self.prefix = prefix
  338.         self.load_types = load_types
  339.         self.py_ssize_t_clean = py_ssize_t_clean
  340.         self.built_defs = []
  341.         if isinstance(defs, tuple):
  342.             self.defs = defs[0]
  343.             self.built_defs.append(defs)
  344.         else:
  345.             self.defs = defs
  346.         self.register = []
  347.         for r in register:
  348.             if isinstance(r, tuple):
  349.                 self.register.append(r[0])
  350.                 self.built_defs.append(r)
  351.                 continue
  352.             self.register.append(r)
  353.         
  354.  
  355.     
  356.     def check_dates(self):
  357.         files = self.register[:]
  358.         files.append(self.override)
  359.         files.append(self.defs)
  360.         return not distutils.dep_util.newer_group(files, self.output)
  361.  
  362.     
  363.     def generate_defs(self):
  364.         for target, sources in self.built_defs:
  365.             if distutils.dep_util.newer_group(sources, target):
  366.                 args = [
  367.                     'dummy',
  368.                     target] + sources
  369.                 codegen.createdefs.main(args)
  370.                 continue
  371.         
  372.  
  373.     
  374.     def generate(self):
  375.         self.generate_defs()
  376.         if self.check_dates():
  377.             return None
  378.         
  379.         for item in self.register:
  380.             dp = DefsParser(item, dict(GLOBAL_MACROS))
  381.             dp.startParsing()
  382.             register_types(dp)
  383.         
  384.         if self.load_types:
  385.             globals = { }
  386.             execfile(self.load_types, globals)
  387.         
  388.         dp = DefsParser(self.defs, dict(GLOBAL_MACROS))
  389.         dp.startParsing()
  390.         register_types(dp)
  391.         fd = open(self.output, 'w')
  392.         sw = SourceWriter(dp, Overrides(self.override), self.prefix, FileOutput(fd, self.output))
  393.         sw.write(self.py_ssize_t_clean)
  394.         fd.close()
  395.  
  396.  
  397.  
  398. class TemplateExtension(PkgConfigExtension):
  399.     
  400.     def __new__(cls, *args, **kwds):
  401.         if not template_classes_enabled:
  402.             raise NameError("'%s' is not defined\n" % cls.__name__ + codegen_error_message)
  403.         
  404.         return PkgConfigExtension.__new__(cls, *args, **kwds)
  405.  
  406.     
  407.     def __init__(self, **kwargs):
  408.         name = kwargs['name']
  409.         defs = kwargs['defs']
  410.         if isinstance(defs, tuple):
  411.             output = defs[0][:-5] + '.c'
  412.         else:
  413.             output = defs[:-5] + '.c'
  414.         override = kwargs['override']
  415.         load_types = kwargs.get('load_types')
  416.         py_ssize_t_clean = kwargs.pop('py_ssize_t_clean', False)
  417.         self.templates = []
  418.         self.templates.append(Template(override, output, defs, 'py' + name, kwargs['register'], load_types, py_ssize_t_clean))
  419.         del kwargs['register']
  420.         del kwargs['override']
  421.         del kwargs['defs']
  422.         if load_types:
  423.             del kwargs['load_types']
  424.         
  425.         if kwargs.has_key('output'):
  426.             kwargs['name'] = kwargs['output']
  427.             del kwargs['output']
  428.         
  429.         PkgConfigExtension.__init__(self, **kwargs)
  430.  
  431.     
  432.     def generate(self):
  433.         map((lambda x: x.generate()), self.templates)
  434.  
  435.  
  436.